<?php

declare(strict_types=1);
namespace App\Core\Common\Facade;

use App\Constants\StatusCode;
use App\Model\User;

class AdminAuth
{
    protected $_config = [
        'auth_on'           =>  true,                // 认证开关
        'auth_type'         =>  1,                   // 认证方式，1为实时认证；2为登录认证。
        'auth_group'        =>  'auth_group',        // 用户组数据表名
        'auth_access'       =>  'auth_access', // 用户-用户组关系表
        'auth_rule'         =>  'auth_rule',         // 权限规则表
        'auth_user'         =>  'sysuser',             // 用户信息表
        'auth_user_id_field'=>  'id',                // 用户表ID字段名
    ];
    /**
     * 检查权限
     * @param  string   $name     需要验证的权限规则
     * @param  integer  $uid      认证用户ID
     * @return boolean           通过验证返回true;失败返回false
     */
    public function check($name, $uid)
    {
        $list = [];
        if (!$this->_config['auth_on']) return true;
        $authList = $this->getAuthList($uid);
        if (in_array($name,$authList)) return true;
        return false;
    }
    /**
     * 获得权限列表
     * @param  integer $uid  用户ID
     * @param  integer $type 规则类型
     * @return array       权限列表
     */
    protected function getAuthList($uid)
    {
        $_authList = [];
        $permis = User::query()->find($uid)->roles()->get();
        foreach ($permis as $key => $item) $_authList = array_merge($_authList,$item->menus()->where(['status'=>1])->pluck('name')->toArray());
        return array_unique($_authList);
    }
}